home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 1.3 KB | 38 lines | [TEXT/YHS2] |
- -- These primitives are used to implement arrays with constant time
- -- access. There are destructive update routines for arrays for use
- -- internally in functions such as array. These are impure but are
- -- marked as pure to keep them out of the top level monad. This should
- -- be redone using lambda-var someday.
-
- interface PreludeBltinArray where
-
- -- Used to represent vectors with delayed components
- import PreludeArrayInternal(Vector)
- -- An explicit represenation of a delayed object
- import PreludeArrayInternal(Delay)
-
- -- Primitive vectors now always have strict components. This permits us
- -- to treat array indexing as an atomic operation without the explicit
- -- force on access.
-
- primVectorSel :: Vector a -> Int -> a
- primVectorUpdate :: Vector a -> Int -> a -> a
- primMakeVector :: Int -> a -> Vector a
- primCopyVector :: Vector a -> Vector a
-
- -- These functions are used for explicit sequencing of destructive ops
-
- strict1 :: a -> b -> b
- primForce :: Delay a -> a
-
- {-#
- primVectorSel :: LispName("prim.vector-sel"), Complexity(1)
- primVectorUpdate :: LispName("prim.vector-update"), Complexity(1)
- primMakeVector :: LispName("prim.make-vector"), Complexity(4)
- primCopyVector :: LispName("prim.copy-vector"), Complexity(5)
- strict1 :: Strictness("S,N"),
- LispName("prim.strict1")
- primForce :: LispName("prim.force")
- #-}
-
-